/*
 * UVa 401
 * 回文词
 *
 * 输入一个字符串，判断它是否为回文串以及镜像串。
 * 回文串：反转以后和原串相同，如 abba 和 madam。
 * 镜像串：左右镜像之后和原串相同，如 2S 和 3AIAE。
 * 在本题中，每个字符的镜像如下所示。
 * 注意：并不是每个字符在镜像之后都能得到一个合法字符。
 *
 * Character
 * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9
 * Reverse
 * A       3     H I L   J M   O       2 T U V W X Y 5 1 S E   Z     8
 *
 * 输入的每行包含一个字符串（保证只有上述字符。不含空白字符），
 * 判断它是否为回文串和镜像串（共 4 种组合）。
 * 每组数据之后输出一个空行。
 *
 * 样例输入：
 * NOTAPALINDROME
 * ISAPALINILAPASI
 * 2A3MEAS
 * ATOYOTA
 * 样例输出：
 * NOTAPALINDROME -- is not a palindrome.
 *
 * ISAPALINILAPASI -- is a regular palindrome.
 *
 * 2A3MEAS -- is a mirrored string.
 *
 * ATOYOTA -- is a mirrored palindrome.
 */

#include <iostream>
#include <fstream>
#include <string>
#define LOCAL
using namespace std;
const string Char(
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789");
const string Rev(
    "A   3  HIL JM O   2TUVWXY51SE Z  8 ");
const string res[] = {
    "is not a palindrome.",
    "is a regular palindrome.",
    "is a mirrored string.",
    "is a mirrored palindrome.",
};
int main()
{
#ifdef LOCAL
    ifstream cin("in.txt");
    ofstream cout("out.txt");
#endif
    string str;
    int flag; // 存判断结果：0 都不是，1 回文，2 镜像，3 都是
    while (cin >> str)
    {
        flag = 0;
        // 判断回文
        int l = 0, r = str.length() - 1; // 首尾下标
        while (l < r && str[l] == str[r])
        {
            ++l;
            --r;
        }
        if (l >= r)
            ++flag;
        // 判断镜像
        l = 0;
        r = str.length() - 1;
        while (l <= r)
        {
            /*
              下面使用 find 浪费了，
              Char 中的两段字符在 ASCII 上连续，
              可以常量时间的
             */
            if (Rev[Char.find(str[l])] != str[r])
                break;
            ++l;
            --r;
        }
        if (l > r)
            flag += 2;
        // 输出
        cout << str << " -- " << res[flag] << '\n'
             << endl;
    }
    return 0;
}

// 课本答案
// #include <stdio.h>
// #include <string.h>
// #include <ctype.h>
// const char *rev = "A   3  HIL JM O   2TUVWXY51SE Z  8 ";
// const char *msg[] = {"not a palindrome", "a regular palindrome", "a mirrored string", "a mirrored palindrome"};
// char r(char ch)
// {
//     // 利用了字符 'A'~'Z' '0'~'9' 在 ASCII 上连续的特性
//     if (isalpha(ch))
//         return rev[ch - 'A'];
//     return rev[ch - '0' + 25];
// }
// int main()
// {
//     char s[30];
//     while (scanf("%s", s) == 1)
//     {
//         int len = strlen(s);
//         int p = 1, m = 1;
//         for (int i = 0; i < (len + 1) / 2; i++)
//         {
//             if (s[i] != s[len - 1 - i])
//                 p = 0; // 不是回文串
//             if (r(s[i]) != s[len - 1 - i])
//                 m = 0; // 不是镜像串
//         }
//         printf("%s -- is %s.\n\n", s, msg[m * 2 + p]);
//     }
//     return 0;
// }